package com.czk.oom;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 6.unable to create new thread
 * 在高并发服务时，经常会出现如下错误，
 * <p>
 * 导致原因：
 * <p>
 * 1.应用程序创建了太多的线程，一个应用进程创建的线程超过了系统承载极限
 * 2.服务器不允许应用程序创建这么多线程，linux系统默认允许单个进程可以创建的线程数为1024个（如果是普通用户小于这个值）
 * 解决办法：
 * <p>
 * 1.降低应用程序创建线程的数量，分析应用是否真的需要创建这么多线程
 * 2.对于有的应用确实需要创建这么多的线程，可以修改linux服务器配置，扩大linux的默认限制
 * 查看：ulimit -u
 * <p>
 * 修改：vim /etc/security/limits.d/90-nproc.conf
 *
 * @Author:ChenZhangKun
 * @Date: 2021/7/30 14:12
 */
@RestController
public class UnableCreateThreadController {
    /**
     * 友情提示:千万别在windows中运行这段代码，如果不小心和我一样试了，那就只能强制重启了
     */
    @GetMapping("/unableCreateThread")
    public void unableCreateThread() {
        for (int i = 0; ; i++) {
            System.out.println("i的值为：" + i);
            new Thread(() -> {
                try {
                    Thread.sleep(1000 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}
